In this course we discuss the formalization of knowledge and its processing within machines. We shall show how to design and develop computer systems (Knowledge-based systems) that can draw conclusions (using reasoning), similar to human reasoning where knowledge is represented in a machine-interpretable form. We shall examine many knowledge representation formalisms such as rule systems, classical logic (Natural Deduction and Resolution proofs) and (Ontology)description logic. We shall also show how to deal incomplete information using defeasible reasoning.